'use strict';

import DateTime from "@/utils/DateTime";

// 在window挂载一个$storage对象
window.$storage = window.$storage || {};

/**
 * 设置缓存
 *
 * @param key 键，一般为字符串
 * @param value 值，一般为对象
 */
export const setItem = (key, value) => {
  // 判断当前浏览器是否启用localStorage
  if (window.localStorage) {
    window.localStorage.setItem(key, JSON.stringify(value));
  } else {
    window.$storage[key] = value;
  }
};

/**
 * 获取缓存值
 *
 * @param key 键，一般为字符串
 * @returns {any} 值，一般为对象
 */
export const getItem = key => {
  // 判断当前浏览器是否启用localStorage
  if (window.localStorage) {
    return JSON.parse(window.localStorage.getItem(key));
  } else {
    return window.$storage[key];
  }
};

/**
 * 获取数据字典数据
 *
 * @param key 数据字典保存唯一键，一般为字符串
 * @returns {Promise<unknown>} 字典对象列表
 */
export const getDictData = key => {
  let obj = getItem(key);
  if (obj && obj.time && DateTime.of().toDate() === DateTime.of(obj.time).toDate()) {
    return Promise.resolve(obj.data);
  } else {
    return Promise.reject();
  }
};

/**
 * 刷新数据字典数据
 *
 * @param key 数据字典保存唯一键，一般为字符串
 * @param dictList 数据字典数据列表
 * @returns {Promise<unknown>} 字典对象列表
 */
export const refreshDictData = (key, dictList) => {
  setItem(key, {
    data: dictList,
    time: new Date().getTime()
  });
  return Promise.resolve(dictList);
};

// 导出默认对象
export default {
  setItem,
  getItem,
  getDictData,
  refreshDictData
}
